package war.jogadores;

import java.awt.Image;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import javax.swing.ImageIcon;
import javax.swing.Timer;

import war.ataque.Ataque;
import war.interfaces.ChefeIf;
import war.sons.Sons;

public class Chefe3 implements ChefeIf, ActionListener{

	private boolean status;
	private Image imagem;
	private int velocidade;
	private int x,y;
	private int vida = 1000;
	private int largura, altura;
	private Timer timer;
	private List<Ataque> ataques;
	private boolean atirar;
	private Image imagemVida;
	private String caminhoImgVida;
	private ImageIcon atingido;
	private boolean morrendo;
	
	public Chefe3(int x, int y){
		
		setX(x);
		setY(y);
		setVida(1000);
		setStatus(true);
		ImageIcon caminho  = new ImageIcon(".\\images\\inimigos\\chefe2.png");
		imagem = caminho.getImage();
		ataques = new ArrayList<Ataque>();
		
		ImageIcon imgVida = new ImageIcon(".\\images\\jogador\\vida.jpg");
		setImagemVida(imgVida.getImage());
		
		atingido = new ImageIcon(".\\images\\inimigos\\chefe2.png");
		
		
		setAltura(getImagem().getHeight(null));
		setLargura(getImagem().getWidth(null));
		
		timer = new Timer(1300, this);
	    timer.start();
		
	}
	public Chefe3(){
		setVida(1000);
		setStatus(true);
		ImageIcon caminho  = new ImageIcon(".\\images\\inimigos\\chefe2.png");
		imagem = caminho.getImage();
		ataques = new ArrayList<Ataque>();
		
		
		ImageIcon imgVida = new ImageIcon(".\\images\\jogador\\vida.jpg");
		setImagemVida(imgVida.getImage());
		
		atingido = new ImageIcon(".\\images\\inimigos\\chefe2.png");
		
		setAltura(getImagem().getHeight(null));
		setLargura(getImagem().getWidth(null));
		
		timer = new Timer(1200, this);
	    timer.start();
	}
	public void colisao(int pontos) {
		
		setVida(getVida() - pontos);
		
		ImageIcon caminho  = new ImageIcon(".\\images\\inimigos\\chefe2Atingido.png");
		setImagem(caminho.getImage());
		
		Thread thread = new Thread() {
			public void run() {
				try {
					Thread.sleep(150);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
				if(getStatus()){
					setImagem(atingido.getImage());
				}
			};
		};
		thread.start();
	}
	public void movimentar(){
		
		if(getY() < -50){
			velocidade = -1;
		}
		if(getY() > 480){
			velocidade = 1;
		}
			
		this.y -= velocidade;
		verificaVida();
	}

	public void atirar() {
		
		Ataque ataque = new Ataque(getX(), getY()+30,-10,"normal",10);
		Random ran = new Random();
		int a = ran.nextInt(10);
		ImageIcon imagem;
		if(a % 2 == 0){
			imagem	 = new ImageIcon(".\\images\\inimigos\\tiroChefe.png"); 
		
		}
		else
		{
			imagem = new ImageIcon(".\\images\\inimigos\\tiroChefe2.png"); 
			Sons.especial();
		}
		ataque.setImagem(imagem.getImage());
		ataques.add(ataque);
		
	}
	private void verificaVida() {
		
			 if(getVida() >= 100 && getVida() < 200)
			 {
			 	caminhoImgVida = ".\\images\\jogador\\vida10.png";
			 }
			 if(getVida() >= 200 && getVida() < 300)
			 {
			 	caminhoImgVida = ".\\images\\jogador\\vida20.png";
			 }
			 if(getVida() >= 300 && getVida() < 400)
			 {
			 	caminhoImgVida = ".\\images\\jogador\\vida30.png";
			 }
			 if(getVida() >= 400 && getVida() < 500)
			 {
			 	caminhoImgVida = ".\\images\\jogador\\vida40.png";
			 }
			 if(getVida() >= 500 && getVida() < 600)
			 {
			 	caminhoImgVida = ".\\images\\jogador\\vida50.png";
			 }
			 if(getVida() >= 600 && getVida() < 700)
			 {
			 	caminhoImgVida = ".\\images\\jogador\\vida60.png";
			 }
			 if(getVida() >= 700 && getVida() < 800)
			 {
			 	caminhoImgVida = ".\\images\\jogador\\vida70.png";
			 }
			 if(getVida() >= 800 && getVida() < 900)
			 {
			 	caminhoImgVida = ".\\images\\jogador\\vida80.png";
			 }
			 if(getVida() >= 900 && getVida() < 1000)
			 {
			 	caminhoImgVida = ".\\images\\jogador\\vida90.png";
			 }
			 if(getVida() == 1000)
			 {
			 	caminhoImgVida = ".\\images\\jogador\\vida.png";
			 }
			 
		ImageIcon imgVida = new ImageIcon(caminhoImgVida);
		setImagemVida(imgVida.getImage());
		
	}
	public void kill() {

		setMorrendo(true);
		ImageIcon caminho  = new ImageIcon(".\\images\\inimigos\\chefeExplosao.gif");
		setImagem(caminho.getImage());
		setStatus(false);

		Thread thread = new Thread() {
			public void run() {
				try {
					Thread.sleep(1100);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
					setX(-100);
					setY(-300);
			};
		};
		thread.start();
	}
	
	public boolean isMorrendo() {
		return morrendo;
	}
	public void setMorrendo(boolean morrendo) {
		this.morrendo = morrendo;
	}
	public void setImagemVida(Image imagemVida) {
		this.imagemVida = imagemVida;
	}
	public List<Ataque> getAtaques() {
		return ataques;
	}
	public void setAtaques(List<Ataque> ataque) {
		this.ataques = ataque;
	}
	public int getLargura() {
		return largura;
	}

	public void setLargura(int largura) {
		this.largura = largura;
	}
	public int getVida() {
		return vida;
	}
	public void setVida(int vida) {
		this.vida = vida;
	}
	public int getAltura() {
		return altura;
	}
	public void setAltura(int altura) {
		this.altura = altura;
	}
	public int getVelocidade() {
		return velocidade;
	}

	public void setVelocidade(int velocidade) {
		this.velocidade = velocidade;
	}

	public boolean getStatus() {
		return status;
	}

	public void setStatus(boolean status) {
		this.status = status;
	}

	public Image getImagem() {
		return imagem;
	}
	
	public void setImagem(Image imagem) {
		this.imagem = imagem;
	}

	public int getX() {
		return x;
	}

	public void setX(int x) {
		this.x = x;
	}

	public int getY() {
		return y;
	}

	public void setY(int y) {
		this.y = y;
	}
	public boolean isAtirar() {
		return atirar;
	}
	public Image getImagemVida() {
		
		return imagemVida;
	}
	public void setAtirar(boolean atirar) {
		this.atirar = atirar;
	}
	public Rectangle getBounds(){
		
		return new Rectangle(x+40,y,largura,altura-20);
	}
	@Override
	public void actionPerformed(ActionEvent e) {
		if(atirar)
		{
			atirar();
				
		}
	}
	
}
